package com.example.arithmeticleetcode.leetcode.nov;

/**
 * @program: arithmetic-leetcode
 * @description:
 * @author: FangZhen
 * @create: 2020-11-10 10:46
 **/
public class Demo05 {

    public static void main(String[] args) {

    }

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode listNode = new ListNode();
        ListNode result = listNode;
        while (l1.next != null && l2.next != null) {
            if (l1.next.val > l2.next.val) {
                listNode = getListNode(l2, listNode);
                l2 = l2.next;
            } else if (l1.next.val == l2.next.val){
                listNode = getListNode(l2, listNode);
                l2 = l2.next;
                listNode = getListNode(l1, listNode);
                l1 = l1.next;
            } else {
                listNode = getListNode(l1, listNode);
                l1 = l1.next;
            }
        }
        while (l1.next != null) {
            listNode = getListNode(l1, listNode);
            l1 = l1.next;
        }
        while (l2.next != null) {
            listNode = getListNode(l2, listNode);
            l2 = l2.next;
        }
        return result;
    }

    private ListNode getListNode(ListNode l, ListNode listNode) {
        listNode.val = l.next.val;
        ListNode temp = new ListNode();
        listNode.next = temp;
        listNode = temp;
        return listNode;
    }
}


// Definition for singly-linked list.
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
